package light.im;

import java.io.IOException;
import java.net.SocketAddress;

import light.network.object.PackObject;


public interface IActionEndpoint {

	/**
	 * 打开一个可用于发送消息的会话
	 * @param target
	 * @param attachment
	 * @param handler
	 */
	void openSession(SocketAddress target, Object attachment, IMSessionHandler handler);
	
	/**
	 * 向target发送一个请求（数据对象），底层对标识该请求的数据，并在对方响应该请求时回调handler
	 * @param target
	 * @param data
	 * @param handler
	 */
	void request(SocketAddress target, final PackObject req, final IResponseHandler handler);
	
	/**
	 * 为端点注册Action，用于响应数据的到来
	 * 以该Action类的@ActionName标注的值作为Action的名称
	 * @param action
	 * @return
	 */
	IMEndpoint registerAction(IAction action);
	
	/**
	 * 为端点注册Action，用于响应数据的到来
	 * @param actionName
	 * @param action
	 * @return
	 */
	IMEndpoint registerAction(String actionName, IAction action);
	
	/**
	 * 启动该端点，开始一切侦听动作
	 * @throws IOException
	 */
	void start() throws IOException;

}